/*
* Copyright 2001-2005 Stephen Colebourne
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.joda.time;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.joda.time.base.AbstractPartial;
import org.joda.time.chrono.BuddhistChronology;
import org.joda.time.chrono.ISOChronology;
import org.joda.time.field.AbstractPartialFieldProperty;
/**
* This class is a Junit unit test for YearMonthDay.
*
* @author Stephen Colebourne
*/
public class TestAbstractPartial extends TestCase {
private static final DateTimeZone PARIS = DateTimeZone.forID("Europe/Paris");
private long TEST_TIME_NOW =
(31L + 28L + 31L + 30L + 31L + 9L -1L) * DateTimeConstants.MILLIS_PER_DAY;
private long TEST_TIME1 =
(31L + 28L + 31L + 6L -1L) * DateTimeConstants.MILLIS_PER_DAY
+ 12L * DateTimeConstants.MILLIS_PER_HOUR
+ 24L * DateTimeConstants.MILLIS_PER_MINUTE;
private long TEST_TIME2 =
(365L + 31L + 28L + 31L + 30L + 7L -1L) * DateTimeConstants.MILLIS_PER_DAY
+ 14L * DateTimeConstants.MILLIS_PER_HOUR
+ 28L * DateTimeConstants.MILLIS_PER_MINUTE;
private DateTimeZone zone = null;
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
public static TestSuite suite() {
return new TestSuite(TestAbstractPartial.class);
}
public TestAbstractPartial(String name) {
super(name);
}
protected void setUp() throws Exception {
DateTimeUtils.setCurrentMillisFixed(TEST_TIME_NOW);
zone = DateTimeZone.getDefault();
DateTimeZone.setDefault(DateTimeZone.UTC);
}
protected void tearDown() throws Exception {
DateTimeUtils.setCurrentMillisSystem();
DateTimeZone.setDefault(zone);
zone = null;
}
//-----------------------------------------------------------------------
public void testGetValue() throws Throwable {
MockPartial mock = new MockPartial();
assertEquals(1970, mock.getValue(0));
assertEquals(1, mock.getValue(1));
try {
mock.getValue(-1);
fail();
} catch (IndexOutOfBoundsException ex) {}
try {
mock.getValue(2);
fail();
} catch (IndexOutOfBoundsException ex) {}
}
public void testGetValues() throws Throwable {
MockPartial mock = new MockPartial();
int[] vals = mock.getValues();
assertEquals(2, vals.length);
assertEquals(1970, vals[0]);
assertEquals(1, vals[1]);
}
public void testGetField() throws Throwable {
MockPartial mock = new MockPartial();
assertEquals(BuddhistChronology.getInstanceUTC().year(), mock.getField(0));
assertEquals(BuddhistChronology.getInstanceUTC().monthOfYear(), mock.getField(1));
try {
mock.getField(-1);
fail();
} catch (IndexOutOfBoundsException ex) {}
try {
mock.getField(2);
fail();
} catch (IndexOutOfBoundsException ex) {}
}
public void testGetFieldType() throws Throwable {
MockPartial mock = new MockPartial();
assertEquals(DateTimeFieldType.year(), mock.getFieldType(0));
assertEquals(DateTimeFieldType.monthOfYear(), mock.getFieldType(1));
try {
mock.getFieldType(-1);
fail();
} catch (IndexOutOfBoundsException ex) {}
try {
mock.getFieldType(2);
fail();
} catch (IndexOutOfBoundsException ex) {}
}
public void testGetFieldTypes() throws Throwable {
MockPartial mock = new MockPartial();
DateTimeFieldType[] vals = mock.getFieldTypes();
assertEquals(2, vals.length);
assertEquals(DateTimeFieldType.year(), vals[0]);
assertEquals(DateTimeFieldType.monthOfYear(), vals[1]);
}
public void testGetPropertyEquals() throws Throwable {
MockProperty0 prop0 = new MockProperty0();
assertEquals(true, prop0.equals(prop0));
assertEquals(true, prop0.equals(new MockProperty0()));
assertEquals(false, prop0.equals(new MockProperty1()));
assertEquals(false, prop0.equals(new MockProperty0Val()));
assertEquals(false, prop0.equals(new MockProperty0Field()));
assertEquals(false, prop0.equals(new MockProperty0Chrono()));
assertEquals(false, prop0.equals(""));
assertEquals(false, prop0.equals(null));
}
//-----------------------------------------------------------------------
static class MockPartial extends AbstractPartial {
int[] val = new int[] {1970, 1};
MockPartial() {
super();
}
protected DateTimeField getField(int index, Chronology chrono) {
switch (index) {
case 0:
return chrono.year();
case 1:
return chrono.monthOfYear();
default:
throw new IndexOutOfBoundsException();
}
}
public int size() {
return 2;
}
public int getValue(int index) {
return val[index];
}
public void setValue(int index, int value) {
val[index] = value;
}
public Chronology getChronology() {
return BuddhistChronology.getInstanceUTC();
}
}
static class MockProperty0 extends AbstractPartialFieldProperty {
MockPartial partial = new MockPartial();
public DateTimeField getField() {
return partial.getField(0);
}
public ReadablePartial getReadablePartial() {
return partial;
}
public int get() {
return partial.getValue(0);
}
}
static class MockProperty1 extends AbstractPartialFieldProperty {
MockPartial partial = new MockPartial();
public DateTimeField getField() {
return partial.getField(1);
}
public ReadablePartial getReadablePartial() {
return partial;
}
public int get() {
return partial.getValue(1);
}
}
static class MockProperty0Field extends MockProperty0 {
public DateTimeField getField() {
return BuddhistChronology.getInstanceUTC().hourOfDay();
}
}
static class MockProperty0Val extends MockProperty0 {
public int get() {
return 99;
}
}
static class MockProperty0Chrono extends MockProperty0 {
public ReadablePartial getReadablePartial() {
return new MockPartial() {
public Chronology getChronology() {
return ISOChronology.getInstanceUTC();
}
};
}
}
}